package logic

import (
	"encoding/json"
	"fmt"
	"io"
	"mime/multipart"
	"os"
	"path/filepath"
)

// SaveUserAvatar 将用户提交的图片保存到服务器（头像），传入id和图片生成对应地址
func SaveUserAvatar(userID int64, file *multipart.FileHeader) (string, error) {
	// 打开上传的文件
	uploadedFile, err := file.Open()
	if err != nil {
		return "", err
	}
	defer uploadedFile.Close()

	// 创建保存图片的目录
	savePath := "resource/image/avatar"
	if err := os.MkdirAll(savePath, os.ModePerm); err != nil {
		return "", err
	}

	// 生成保存图片的文件路径，以用户ID命名
	avatarFileName := filepath.Join(savePath, fmt.Sprintf("%d.jpg", userID))

	// 创建图片文件
	avatarFile, err := os.Create(avatarFileName)
	if err != nil {
		return "", err
	}
	defer avatarFile.Close()

	// 将上传的文件内容复制到图片文件中
	if _, err := io.Copy(avatarFile, uploadedFile); err != nil {
		return "", err
	}

	// 返回保存图片的路径
	return avatarFileName, nil
}

// SaveCompletionImages 将用户提交的多个图片保存到服务器（任务拍照）
func SaveCompletionImages(taskID int64, files []*multipart.FileHeader) ([]byte, error) {
	var filepaths []string

	// 遍历每个上传的文件
	for idx, file := range files {
		// 打开上传的文件
		uploadedFile, err := file.Open()
		if err != nil {
			return nil, err
		}
		defer uploadedFile.Close()

		// 生成保存图片的文件名，以任务ID和序号命名，重复直接覆盖
		filename := fmt.Sprintf("%d_%d.jpg", taskID, idx+1)

		// 创建保存图片的目录
		savePath := "resource/image/task"
		if err := os.MkdirAll(savePath, os.ModePerm); err != nil {
			return nil, err
		}

		// 生成保存图片的完整路径
		imageFilePath := filepath.Join(savePath, filename)

		// 创建图片文件
		imageFile, err := os.Create(imageFilePath)
		if err != nil {
			return nil, err
		}
		defer imageFile.Close()

		// 将上传的文件内容复制到图片文件中
		if _, err := io.Copy(imageFile, uploadedFile); err != nil {
			return nil, err
		}

		// 将图片文件路径添加到数组中
		filepaths = append(filepaths, imageFilePath)
	}

	// 将图片文件路径数组转换为 JSON 格式
	jsonData, err := json.Marshal(filepaths)
	if err != nil {
		return nil, err
	}

	return jsonData, nil
}
